iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0

前兩天我們聊了 MCP-SSE 和 n8n 的基礎,以及潛在威脅。今天,我們來動手建立一個最小的 MCP-SSE + n8n workflow,來個經典的 Hello World。這不僅是練習,還能展示即時 AI 自動化的威力,並暴露無授權 API 呼叫的風險,為後續攻擊模擬鋪路。

準備環境

假設你已安裝 n8n(可用 Docker 快速部署):

docker run -it --rm --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n

MCP-SSE 伺服器已運行在 http://localhost:8000/api/stream,使用 OpenAI LLM 處理請求並透過 Server-Sent Events(SSE)推送回應(假設由團隊或開源專案設置)。

建立 n8n Workflow

  1. 開啟 n8n 面板(http://localhost:5678),創建新 workflow。

  2. Webhook 節點:
    方法:POST(匹配 SSE 請求)
    路徑:/hello
    驗證:無(模擬未保護狀態,後續會加防護)

  3. HTTP Request 節點:
    URL:http://localhost:8000/api/stream
    方法:POST
    Body:{"prompt": "Say Hello World from AI"}

  4. Code 節點(處理 SSE 回應):n8n 的 HTTP Request 節點對 SSE 支援有限,新增 Code 節點解析事件流:

    const sse_data = $input.first().json.data || "";
    
    const events = sse_data.trim().split("\n\n");
    
    const messages = events
        .map(event => event.replace("data:", "").trim())
        .filter(msg => msg !== "[DONE]" && msg !== "");
    
    const selectedWords = ["Hello", "World", "From", "AI"];
    const output = messages.filter(msg => selectedWords.includes(msg));
    
    return [{ json: { helloWorldFromAI: output.join(" ") } }];
    
  5. Respond to Webhook 節點:返回結果。

https://ithelp.ithome.com.tw/upload/images/20250917/20168687ul9H5nJlzc.png

測試 Workflow 與輸出狀態

用 postman 觸發:
n8n 輸出狀態(Code 節點結果):
https://ithelp.ithome.com.tw/upload/images/20250917/20168687IDJGRguq2q.png

這顯示 MCP-SSE 透過 SSE 推送 AI 回應,n8n 成功解析並輸出。

無授權 API 呼叫演示

模擬駭客直接呼叫 MCP-SSE 的 /api/stream(假設無 API Key 保護):

https://ithelp.ithome.com.tw/upload/images/20250917/20168687GcTrzvUrgQ.png

這表示任何人可訪問 SSE 端點,竊聽即時資料流或觸發 AI 任務,暴露嚴重安全風險。

為什麼從這裡開始?

這個 MCP-SSE + n8n setup 展示即時 AI 自動化的威力,但弱點明顯:

  1. Webhook 風險:無驗證的 Webhook 可被任意呼叫。
  2. SSE 端點風險:公開的 /api/stream 允許駭客訂閱或濫用。
  3. 未加密連線:SSE 事件流未使用 HTTPS,資料可能洩露。這是後續攻擊的沙盤,模擬真實場景如聊天機器人或即時資料處理。

明天會模擬第一個攻擊:不受控的 Webhook 和 MCP-SSE 端點被任意呼叫。


上一篇
你的 MCP × n8n 會怎樣被濫用?
系列文
別讓駭客拿走你的AI控制權:MCP x n8n 防禦實戰全攻略3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言